package com.zzz.four;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/*
 * @author zzr
 * @date: 2025/07/10  23:12
 * @description:
 * KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣，他想知道杨辉三角的前n行，请编程帮他解答。
 * 杨辉三角，本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。
 * 其性质包括:每行的端点数为1，一个数也为1;每个数等于它左上方和上方的两数之和。
 */
public class Demo3 {
    public static void main(String[] args) {
        // 读取行数 n
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();

        // 构建杨辉三角的二维列表
        List<List<Integer>> triangle = new ArrayList<>();
        for (int rowIndex = 0; rowIndex < n; rowIndex++) {
            List<Integer> currentRow = new ArrayList<>();
            for (int colIndex = 0; colIndex <= rowIndex; colIndex++) {
                // 首尾元素都是 1
                if (colIndex == 0 || colIndex == rowIndex) {
                    currentRow.add(1);
                } else {
                    // 中间元素 = 上一行的左侧元素 + 上一行右侧元素
                    int left = triangle.get(rowIndex - 1).get(colIndex - 1);
                    int right = triangle.get(rowIndex - 1).get(colIndex);
                    currentRow.add(left + right);
                }
            }
            triangle.add(currentRow);
        }
        for (List<Integer> row : triangle) {
            for (int num : row) {
                System.out.printf("%5d", num);// 右对齐
            }
            System.out.println();// 换行
        }
    }
}
